# frozen_string_literal: true

class IPAddr
  def self.handle_wildcards(val)
    return if val.blank?

    num_wildcards = val.count("*")

    return val if num_wildcards == 0

    # strip ranges like "/16" from the end if present
    v = val.gsub(%r{/.*}, "")

    return if v[v.index("*")..-1] =~ /[^\.\*]/

    parts = v.split(".")
    (4 - parts.size).times { parts << "*" } # support strings like 192.*
    v = parts.join(".")

    "#{v.tr("*", "0")}/#{32 - (v.count("*") * 8)}"
  end

  def to_cidr_s
    if @addr
      mask = @mask_addr.to_s(2).count("1")
      if mask == 32
        to_s
      else
        "#{self}/#{mask}"
      end
    else
      nil
    end
  end
end
